package io.gitee.devaper.starlight.websocket

import org.springframework.core.annotation.AliasFor
import org.springframework.stereotype.Component
import org.springframework.web.socket.server.HandshakeHandler
import org.springframework.web.socket.server.HandshakeInterceptor
import kotlin.reflect.*

/**
 * 将类标记为WebSocket控制器, 同时需要实现 WebSocketHandler 接口
 */
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@Component
annotation class WebSocketController(

    /**
     * WS地址
     */
    @get:AliasFor("paths")
    val value: Array<String> = [],

    /**
     * WS地址
     */
    @get:AliasFor("value")
    val paths: Array<String> = [],

    /**
     * 作为组件的名称
     */
    @get:AliasFor("value", annotation = Component::class)
    val name: String = "",

    /**
     * 允许的源
     */
    val allowedOrigins: Array<String> = [],

    /**
     * 允许的源匹配规则
     */
    val allowedOriginPatterns: Array<String> = [],

    /**
     * 指定HandshakeInterceptor, 也可以自身实现该接口, 可以指定多个, 需要在容器中
     */
    val interceptors: Array<KClass<out HandshakeInterceptor>> = [],

    /**
     * 指定HandshakeHandler, 也可以自身实现该接口, 只能生效一个, 需要在容器中
     */
    val handshakeHandler: Array<KClass<out HandshakeHandler>> = []
)
